package com.arpa.oms.service;

import com.arpa.core.web.Result;
import com.arpa.oms.domain.dto.OmsSaleReturnDTO;
import com.arpa.oms.domain.entity.OmsSaleReturn;
import com.arpa.oms.domain.vo.OmsSaleReturnVO;
import com.arpa.wms.domain.entity.Putaway;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * OMS销售退货单 服务类
 * </p>
 *
 * @author LEO
 * @since 2020-11-17
 */
public interface IOmsSaleReturnService extends IService<OmsSaleReturn> {

    /**
     * 保存
     * @param entity
     * @return
     */
    @Override
    boolean save(OmsSaleReturn entity);

    /**
     * 根据code更新实体
     * @param entity
     * @return
     */
    int updateByCode(OmsSaleReturn entity);

    /**
     * 查询列表
     * @param omsSaleReturnDTO
     * @return
     */
    List<OmsSaleReturnVO> queryList(OmsSaleReturnDTO omsSaleReturnDTO);

    /**
     * 查询合计,包含总数
     * @param omsSaleReturnDTO
     * @return
     */
    OmsSaleReturnVO queryListSum(OmsSaleReturnDTO omsSaleReturnDTO);

    /**
     * 作废
     * @param code
     * @return
     */
    Result annul(String code);

    /**
     * 保存
     * @param entity
     * @return
     */
    Result localSave(OmsSaleReturn entity);

    /**
     * @description
     * 提交 销售退货单
     * @author xuyang
     * @date 2020/12/14 13:43
     * @param entity:
     **/
    void submit(OmsSaleReturn entity);

    /**
     * @description
     * 审核
     * @author xuyang
     * @date 2020/12/14 14:19
     * @param entity:
     **/
    void audit(OmsSaleReturn entity);

    /**
     * @description
     * 获取明细vo
     * @author xuyang
     * @date 2020/12/14 15:01
     * @param code:
     **/
    OmsSaleReturnVO getByCode(String code);

    /**
     * @description
     * 根据销售退货单单号，item更新销售退货单数量
     * @author xuyang
     * @date 2020/12/14 17:13
     * @param saleReturnCode:
     **/
    void updateOutQuantityByItems(String saleReturnCode);

    /**
     * @description
     * wms根据销售退货单生成oms出库单
     * @author xuyang
     * @date 2020/12/15 13:10
     * @param saleReturnCode:
     **/
    void wmsSaveOmsOutboundBySaleReturn(String saleReturnCode, Putaway putaway);

    /**
     * @description
     * 根据计划数量与实际数量的差，调整销售单的退货数量
     * @author xuyang
     * @date 2020/12/15 16:03
     * @param sourceCode:
     **/
    void adjustSaleRefundQuantity(String sourceCode);

    /**
     * @param entity:
     * @param usePlanQuantityFlag: true 使用计划数量计算； false：使用实际数量计算
     * @description 根据退货单数量，计算各种金额数据
     * @author xuyang
     * @date 2020/12/14 14:05
     **/
    void calcQuantity(OmsSaleReturn entity, boolean usePlanQuantityFlag);
}
